//################################################################################
// MIT License
// Copyright (c) 2024 ZhangYihua
//
// Change Logs:
// Date           Author       Notes
// 2023-02-01     ZhangYihua   first version
//
// Description  : 
//################################################################################

// converge all enabled interrupts to one pin
module int_mux #(
parameter           INT_NUM                 = 4,
parameter           INT_LEVEL               = 1'b0      // 1'b0:low level trigger interrupt; 1'b1:hight level trigger interrupt;
) ( 
input                                       rst_n,
input                                       clk,

input               [INT_NUM-1:0]           ie,     // interrupt enable configuration
input               [INT_NUM-1:0]           ois,    // original interrupt status from pulse latch(through INT_WC) or level state(no INT_WC)
output              [INT_NUM-1:0]           eis,    // enabled interrupt status(to RO) for CPU checking

output  reg                                 int2cpu
);

//################################################################################
// define local varialbe and localparam
//################################################################################


//################################################################################
// main
//################################################################################

assign eis = ie & ois;
always@(posedge clk or negedge rst_n) begin
    if (rst_n==1'b0) begin
        int2cpu <=`U_DLY (INT_LEVEL==1'b1) ? 1'b0 : 1'b1;
    end else begin
        if (INT_LEVEL==1'b1) begin
            int2cpu <=`U_DLY  |eis;
        end else begin
            int2cpu <=`U_DLY  ~(|eis);
        end
    end
end

//################################################################################
// ASSERTION
//################################################################################

`ifdef CBB_ASSERT_ON
// synopsys translate_off


// synopsys translate_on
`endif

endmodule
